#include "staffserver.h"

long superposition;
int flags = 0;
char time_str[N] = {0};
//管理员登录函数
void do_Administrators_sign_in(DATA data, MSG msg)
{
  if (strcmp("liuqianlong", data.name) == 0 && strcmp("12345678", data.password) == 0)
  {
    printf("用户名密码正确\n");
    sprintf(data.quit, "用户名密码正确\n");
    if (send(msg.acceptfd, &data, sizeof(data), 0) == -1)
    {
      ERRLOG("send1 error");
    }
  }
  else
  {
    sprintf(data.quit, "用户名密码错误\n");
    if (send(msg.acceptfd, &data, sizeof(data), 0) == -1)
    {
      ERRLOG("send1 error");
    }
  }
}
//管理员添加用户
void do_Administrators_add_to(DATA data, MSG msg)
{
  char sql[3 * N] = {0};
  sprintf(sql, "insert into %s values('%s',%d,'%s','%s',%d,'%s',%d);",
          EMPLOYEE, data.name, data.age, data.gender, data.password, data.id, data.department, data.wages);
  char *errmsg;
  if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
  {
    printf("插入失败\n");
    sprintf(data.quit, "插入成败\n");
    if (send(msg.acceptfd, &data, sizeof(data), 0) == -1)
    {
      ERRLOG("send error");
    }
  }
  else
  {
    printf("插入成功\n");
    sprintf(data.quit, "插入成功\n");
    if (send(msg.acceptfd, &data, sizeof(data), 0) == -1)
    {
      ERRLOG("send error");
    }
  }
}
//按工号删除管理员删除用户
void do_Administrators_delete_id(DATA data, MSG msg)
{
  //先查询有没有这个人的id
  char sql[2 * N] = {0};
  char *errmsg;
  char **pazResult;
  int pnRow, pnColumn;
  int ret;
  sprintf(sql, "select * from %s where id=%d;", EMPLOYEE, data.id);
  if (ret = sqlite3_get_table(msg.db, sql, &pazResult, &pnRow, &pnColumn, &errmsg) != SQLITE_OK)
  {
    printf("失败\n");
  }
  if (pnRow == 0)
  {
    sprintf(data.quit, "没有找到该用户\n");
    if (send(msg.acceptfd, &data, sizeof(data), 0) == -1)
    {
      ERRLOG("send error");
    }
    return;
  }
  bzero(sql, sizeof(sql));
  sprintf(sql, "delete from %s where id=%d;", EMPLOYEE, data.id);
  if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
  {
    printf("失败\n");
  }
  printf("删除成功\n");
  sprintf(data.quit, "删除成功\n");
  if (send(msg.acceptfd, &data, sizeof(data), 0) == -1)
  {
    ERRLOG("send2 error");
  }
}
//管理员删除用户按姓名删除
void do_Administrators_delete_name(DATA data, MSG msg)
{
  //先查询有没有这个人的名字
  char sql[2 * N] = {0};
  char *errmsg;
  char **pazResult;
  int pnRow, pnColumn;
  int ret;
  sprintf(sql, "select * from %s where id='%s';", EMPLOYEE, data.name);
  if (ret = (sqlite3_get_table(msg.db, sql, &pazResult, &pnRow, &pnColumn, &errmsg) != SQLITE_OK))
  {
    printf("失败\n");
  }
  if (pnRow == 0)
  {
    sprintf(data.quit, "没有找到该用户\n");
    if (send(msg.acceptfd, &data, sizeof(data), 0) == -1)
    {
      ERRLOG("send error");
    }
    return;
  }
  bzero(sql, sizeof(sql));
  sprintf(sql, "delete from %s where name='%s';", EMPLOYEE, data.name);
  if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
  {
    printf("失败\n");
  }

  printf("删除成功\n");
  sprintf(data.quit, "删除成功\n");
  if (send(msg.acceptfd, &data, sizeof(data), 0) == -1)
  {
    ERRLOG("send error");
  }
}

//管理员修改用户
void do_Administrators_modify(DATA data, MSG msg)
{
  //先查到此人
  char sql[2 * N] = {0};
  char *errmsg;
  char **pazResult;
  int pnRow, pnColumn;
  int ret;
  int temp = data.id;
  sprintf(sql, "select * from %s where id=%d;", EMPLOYEE, data.id);
  if (ret = (sqlite3_get_table(msg.db, sql, &pazResult, &pnRow, &pnColumn, &errmsg) != SQLITE_OK))
  {
    printf("失败\n");
  }

  int index = pnColumn;

  for (int i = 0; i < pnRow; i++)
  {

    for (int j = 0; j < pnColumn; j++)
    {

      printf("字段-> %-10s       值-> %-20s\n", pazResult[j], pazResult[index]);
      strcat(data.information, pazResult[index]);
      strcat(data.information, " | ");
      index++;
    }
    strcat(data.information, " \n ");
    printf("\n");
  }
  sqlite3_free_table(pazResult);

  if (pnRow == 0)
  {
    sprintf(data.quit, "没有找到该用户\n");
    if (send(msg.acceptfd, &data, sizeof(data), 0) == -1)
    {
      ERRLOG("send error");
    }
    return;
  }
  else if (pnRow != 0)
  {
    sprintf(data.quit, "查找到此人\n");
    send(msg.acceptfd, &data, sizeof(data), 0);
    bzero(sql, sizeof(sql));
    while (1)
    {
      recv(msg.acceptfd, &data, sizeof(data), 0);
      switch (data.flat)
      {
      case 0:
        return;
        break;
      case 1:
        sprintf(sql, "update %s set name='%s' where id=%d;", EMPLOYEE, data.name, temp);
        if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) == -1)
        {
          printf("%s修改成功\n", data.name);
        }
        sprintf(data.quit, "%s修改成功\n", data.name);
        send(msg.acceptfd, &data, sizeof(data), 0);
        break;
      case 2:
        sprintf(sql, "update %s set age=%d where id=%d;", EMPLOYEE, data.age, temp);
        if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) == -1)
        {
          printf("%d修改成功\n", data.age);
        }
        sprintf(data.quit, "%d修改成功\n", data.age);
        send(msg.acceptfd, &data, sizeof(data), 0);
        break;
      case 3:
        sprintf(sql, "update %s set password='%s' where id=%d;", EMPLOYEE, data.password, temp);
        if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) == -1)
        {
          printf("%s修改成功\n", data.password);
        }

        sprintf(data.quit, "%s修改成功\n", data.password);
        send(msg.acceptfd, &data, sizeof(data), 0);
        break;
      case 4:
        sprintf(sql, "update %s set gender='%s' where id=%d;", EMPLOYEE, data.gender, temp);
        if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) == -1)
        {
          printf("%s修改成功\n", data.gender);
        }
        sprintf(data.quit, "%s修改成功\n", data.gender);
        send(msg.acceptfd, &data, sizeof(data), 0);
        break;
      case 5:
        sprintf(sql, "select * from %s where id=%d;", EMPLOYEE, data.id);
        if (sqlite3_get_table(msg.db, sql, &pazResult, &pnRow, &pnColumn, &errmsg) != SQLITE_OK)
        {
          printf("失败\n");
        }
        if (pnColumn == 0)
        {
          sprintf(sql, "update %s set id=%d where id=%d;", EMPLOYEE, data.id, temp);
          if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) == -1)
          {
            printf("%d修改成功\n", data.id);
          }
          sprintf(data.quit, "%d修改成功\n", data.id);
          send(msg.acceptfd, &data, sizeof(data), 0);
        }
        else
        {
          sprintf(data.quit, "%d修改失败,工号重复\n", data.id);
          send(msg.acceptfd, &data, sizeof(data), 0);
        }
        break;
      case 6:
        sprintf(sql, "update %s set wages=%d where id=%d;", EMPLOYEE, data.wages, temp);
        if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) == -1)
        {
          printf("%d修改成功\n", data.wages);
        }
        sprintf(data.quit, "%d修改成功\n", data.wages);
        send(msg.acceptfd, &data, sizeof(data), 0);
        break;
      case 7:
        sprintf(sql, "update %s set department='%s' where id=%d;", EMPLOYEE, data.department, temp);
        if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) == -1)
        {
          printf("%s修改成功\n", data.department);
        }
        sprintf(data.quit, "%s修改成功\n", data.department);
        send(msg.acceptfd, &data, sizeof(data), 0);
        break;

      default:
        break;
      }
    }
  }
}

//管理员查询用户
void do_Administrators_query(DATA data, MSG msg)
{
  sprintf(data.quit, "输入你的选项\n");
  send(msg.acceptfd, &data, sizeof(data), 0);
  while (1)
  {
    recv(msg.acceptfd, &data, sizeof(data), 0);
    switch (data.flat)
    {
    case 0:
      return;
      break;
    case 1:
      do_Check_all(data, msg);
      break;
    case 2:
      do_Check_front(data, msg);
      break;
    case 3:
      do_Check_after(data, msg);
      break;
    case 4:
      do_Check_condition(data, msg);
      break;

    default:
      break;
    }
  }
}

//查询所有人信息
void do_Check_all(DATA data, MSG msg)
{
  char sql[N] = {0};
  char *errmsg;
  flags = 0;
  sprintf(sql, "select * from %s;", EMPLOYEE);
  if (sqlite3_exec(msg.db, sql, callbackQuery_all, (void *)&msg.acceptfd, &errmsg) != SQLITE_OK)
  {
    printf("错误：查询失败\n");
  }
  else
  {
    data.flats = 1;
    sprintf(data.quit, "查询成功\n");
    send(msg.acceptfd, &data, sizeof(data), 0);
    printf("查询成功\n");
    bzero(&data, sizeof(data));
    data.flats = 0;
    send(msg.acceptfd, &data, sizeof(data), 0);
  }
}

//查询回调函数
int callbackQuery_all(void *arg, int ncolumn, char **text, char **name)
{
  DATA data;
  int acceptfd = *(int *)arg;
  int i;
  if (flags == 0)
  {
    //输出字段名
  	bzero(data.quit,sizeof(data.quit));
    for (i = 0; i < ncolumn; i++)
    {
      printf("%-11s", name[i]);
      strcat(data.quit, name[i]);
      strcat(data.quit, "\t");
    }

    strcat(data.quit, "\n");
    data.flats = 1;
    send(acceptfd, &data, sizeof(data), 0);
    bzero(data.quit, sizeof(data.quit));

    putchar(10);

    puts("-----------------------------------------");

    flags = 1;
  }
  //输出字段值
  bzero(data.quit,sizeof(data.quit));
  for (i = 0; i < ncolumn; i++)
  {
    printf("%-11s", text[i]);
    strcat(data.quit, text[i]);
    strcat(data.quit, "\t");
  }

  strcat(data.quit, "\n");
  data.flats = 1;
  send(acceptfd, &data, sizeof(data), 0);
  bzero(data.quit, sizeof(data.quit));

  putchar(10);

  //这个回调函数每次执行结束后要返回0给sqlite3_exec函数，说明本次查询结束了
  return 0;
}
//查询前十人信息
void do_Check_front(DATA data, MSG msg)
{
  char *errmsg;
  char sql[2 * N] = {0};
  sprintf(sql, "select * from employeetable limit 0,10;");
  if (sqlite3_exec(msg.db, sql, callbackQuery_all, (void *)&msg.acceptfd, &errmsg) != SQLITE_OK)
  {
    printf("错误:\n");
  }
  else
  {
    data.flats = 1;
    sprintf(data.quit, "查询成功\n");
    send(msg.acceptfd, &data, sizeof(data), 0);
    printf("查询成功\n");
    bzero(&data, sizeof(data));
    data.flats = 0;
    send(msg.acceptfd, &data, sizeof(data), 0);
  }
}
//查询后十人信息
void do_Check_after(DATA data, MSG msg)
{
  char *errmsg;
  char sql[2 * N] = {0};
  sprintf(sql, "select * from employeetable order by id desc limit 0,10; ");
  if (sqlite3_exec(msg.db, sql, callbackQuery_all, (void *)&msg.acceptfd, &errmsg) != SQLITE_OK)
  {
    printf("错误:\n");
  }
  else
  {
    data.flats = 1;
    sprintf(data.quit, "查询成功\n");
    send(msg.acceptfd, &data, sizeof(data), 0);
    printf("查询成功\n");
    bzero(&data, sizeof(data));
    data.flats = 0;
    send(msg.acceptfd, &data, sizeof(data), 0);
  }
}
//条件查询查询
void do_Check_condition(DATA data, MSG msg)
{
  char *errmsg;
  char sql[2 * N] = {0};
  sprintf(sql, "select * from employeetable limit %d,%d; ", data.age, data.id);
  if (sqlite3_exec(msg.db, sql, callbackQuery_all, (void *)&msg.acceptfd, &errmsg) != SQLITE_OK)
  {
    printf("错误:\n");
  }
  else
  {
    data.flats = 1;
    sprintf(data.quit, "查询成功\n");
    send(msg.acceptfd, &data, sizeof(data), 0);
    printf("查询成功\n");
    bzero(&data, sizeof(data));
    data.flats = 0;
    send(msg.acceptfd, &data, sizeof(data), 0);
  }
}

//管理员查询历史记录
void do_Administrators_Historical_records(DATA data, MSG msg)
{
  sprintf(data.quit, "开始查询\n");
  send(msg.acceptfd, &data, sizeof(data), 0);
  while (1)
  {
    recv(msg.acceptfd, &data, sizeof(data), 0);
    switch (data.flat)
    {
    case 0:
      return;
      break;
    case 1:
      do_All_messages(data, msg);
      break;
    case 2:
      do_front_50_messages(data, msg);
      break;
    case 3:
      do_condition_messages(data, msg);
      break;

    default:
      printf("错误：请重试\n");
      break;
    }
  }
}
//所有消息
void do_All_messages(DATA data, MSG msg)
{
  char sql[N] = {0};
  char *errmsg;
  flags = 0;
  sprintf(sql, "select * from %s;", HISTOR);
  if (sqlite3_exec(msg.db, sql, callbackQuery_all, (void *)&msg.acceptfd, &errmsg) != SQLITE_OK)
  {
    printf("错误：查询失败\n");
  }
  else
  {
    data.flats = 1;
    sprintf(data.quit, "查询成功\n");
    send(msg.acceptfd, &data, sizeof(data), 0);
    printf("查询成功\n");
    bzero(&data, sizeof(data));
    data.flats = 0;
    send(msg.acceptfd, &data, sizeof(data), 0);
  }
}
//前十条消息
void do_front_50_messages(DATA data, MSG msg)
{
  char *errmsg;
  char sql[2 * N] = {0};
  sprintf(sql, "select * from %s limit 0,50;", HISTOR);
  if (sqlite3_exec(msg.db, sql, callbackQuery_all, (void *)&msg.acceptfd, &errmsg) != SQLITE_OK)
  {
    printf("错误:\n");
  }
  else
  {
    data.flats = 1;
    sprintf(data.quit, "查询成功\n");
    send(msg.acceptfd, &data, sizeof(data), 0);
    printf("查询成功\n");
    bzero(&data, sizeof(data));
    data.flats = 0;
    send(msg.acceptfd, &data, sizeof(data), 0);
  }
}
//按条件查找消息
void do_condition_messages(DATA data, MSG msg)
{
  char *errmsg;
  char sql[2 * N] = {0};
  sprintf(sql, "select * from %s order by name desc limit %d,%d;", HISTOR, data.age, data.id);
  if (sqlite3_exec(msg.db, sql, callbackQuery_all, (void *)&msg.acceptfd, &errmsg) != SQLITE_OK)
  {
    printf("错误:\n");
  }
  else
  {
    data.flats = 1;
    sprintf(data.quit, "查询成功\n");
    send(msg.acceptfd, &data, sizeof(data), 0);
    printf("查询成功\n");
    bzero(&data, sizeof(data));
    data.flats = 0;
    send(msg.acceptfd, &data, sizeof(data), 0);
  }
}
//用户注册函数
void do_Staff_register(DATA data, MSG msg)
{
  //获取最大id
  char *errmsg;
  char my_sql[N] = {0};
  sprintf(my_sql, "select max(id) from employeetable;");
  if (sqlite3_exec(msg.db, my_sql, callbackQuery_max, NULL, &errmsg) != SQLITE_OK)
  {
    printf("错误  %s \n", sqlite3_errmsg(msg.db));
  }
  else
  {
    printf("查找最大值成功\n");
  }
  char sql[2 * N] = {0};
  sprintf(sql, "insert into %s values('%s',0,'无','%s',%ld,'无','0');", EMPLOYEE, data.name, data.password, superposition);
  printf("yangfs sqlstr : %s\n", sql);
  if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
  {
    printf("错误: %s\n", sqlite3_errmsg(msg.db));
  }
  else
  {
    printf("注册成功\n");
    bzero(data.quit, sizeof(data.quit));
    sprintf(data.quit, "注册成功，你的id号是%ld\n", superposition);
    printf("%s\n", data.quit);
    send(msg.acceptfd, &data, sizeof(data), 0);
  }
}

//查询最大的id
int callbackQuery_max(void *arg, int ncolumn, char **text, char **name)
{
  printf("---------yangfs  ncolumn = %d\n", ncolumn);
  printf("ret = %s\n", text[0]);
  superposition = atoi(text[0]) + 1;
  printf("yangfs------------%ld\n", superposition);
  return 0;
}

//用户登录信息
void do_Staff_sign_in(DATA data, MSG msg)
{
  char sql[2 * N] = {0};
  char *errmsg;
  char **pazResult;
  int pnRow, pnColumn;
  sprintf(sql, "select * from %s where password='%s' and name='%s';", EMPLOYEE, data.password, data.name);
  if (sqlite3_get_table(msg.db, sql, &pazResult, &pnRow, &pnColumn, &errmsg) != SQLITE_OK)
  {
    printf("失败\n");
  }
  else
  {
    printf("成功\n");
  }
  if (pnRow == 0)
  {
    data.flat = 0;
    printf("没有找到该用户\n");
    sprintf(data.quit, "没有找到该用户\n");
    send(msg.acceptfd, &data, sizeof(data), 0);
  }
  else
  {
    //获取登陆时间
    time_t login_time;
    if (time(&login_time) == (time_t)-1)
    {
      ERRLOG("time");
      return;
    }
    struct tm *mytm = localtime(&login_time);
    if (NULL == mytm)
    {
      ERRLOG("localtime");
      return;
    }
    sprintf(time_str, "%04d年%02d月%02d日--%02d:%02d:%02d", mytm->tm_year + 1900, mytm->tm_mon + 1, mytm->tm_mday,
            mytm->tm_hour, mytm->tm_min, mytm->tm_sec); //打印到终端上
    printf("现在的时间为: %s\n", time_str);

    sprintf(sql, "insert into %s values('%s','%s');", HISTOR, data.name, time_str);
    if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
    {
      printf("错误\n");
    }
    else
    {
      printf("成功\n");
    }
    //查找登陆的id号
    sprintf(sql, "select * from %s where name='%s'and password='%s';", EMPLOYEE, data.name, data.password);
    if (sqlite3_exec(msg.db, sql, callbackQuery_id, (void *)&msg.acceptfd, &errmsg) != SQLITE_OK)
    {
      printf("错误\n");
    }
    else
    {
      printf("exec成功\n");
    }

    data.flat = 1;
    sprintf(data.quit, "登录成功\n");
    send(msg.acceptfd, &data, sizeof(data), 0);
    while (1)
    {
      recv(msg.acceptfd, &data, sizeof(data), 0);

      switch (data.flat)
      {
      case 0:
        return;
        break;
      case 1:
        do_Staff_query(data, msg);
        break;
      case 2:
        do_Staff_modify(data, msg);
        break;
      case 3:
        do_Staff_modify_personal(data, msg);
        break;
      case 4:
        do_Staff__Historical_records(data, msg);
        break;

      default:
        printf("选项错误,请重试\n");
        break;
      }
    }
  }
}
//用户查询信息
void do_Staff_query(DATA data, MSG msg)
{
  data.flat = 0;
  flags = 0;
  char sql[N] = {0};
  char *errmsg;
  char **pazResult;
  int pnRow;
  int pnColumn;
  send(msg.acceptfd, &data, sizeof(data), 0);
  recv(msg.acceptfd, &data, sizeof(data), 0);
  sprintf(sql, "select * from %s where id=%d;", EMPLOYEE, data.id);
  if (sqlite3_get_table(msg.db, sql, &pazResult, &pnRow, &pnColumn, &errmsg) != SQLITE_OK)
  {
    printf("错误\n");
  }
  else
  {
    printf("get_table成功\n");
  }
  if (pnColumn != 0)
  {
    if (sqlite3_exec(msg.db, sql, callbackQuery_all, (void *)&msg.acceptfd, &errmsg) != SQLITE_OK)
    {
      printf("错误\n");
    }
    else
    {
      printf("exec成功\n");
    }
  }
  else
  {
    sprintf(data.quit, "未查到此人\n");
    send(msg.acceptfd, &data, sizeof(data), 0);
  }
}
//用户修改密码
void do_Staff_modify(DATA data, MSG msg)
{

  char sql[N] = {0};
  char *errmsg;
  sprintf(sql, "select * from %s where id=%ld;", EMPLOYEE, superposition);
  if (sqlite3_exec(msg.db, sql, callbackQuery_password, (void *)&msg.acceptfd, &errmsg) != SQLITE_OK)
  {
    printf("错误\n");
  }
  else
  {
    printf("exec成功\n");
  }
  recv(msg.acceptfd, &data, sizeof(data), 0);
  printf("data.password=%s data.id=%ld\n", data.password, superposition);

  sprintf(sql, " update %s set password='%s' where id=%ld;", EMPLOYEE, data.password, superposition);
  if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
  {
    printf("错误：更改失败\n");
  }
  else
  {
    printf("密码更改成功\n");
    sprintf(data.quit, "密码更改成功\n");
    send(msg.acceptfd, &data, sizeof(data), 0);
  }
}
//回调函数函数密码
int callbackQuery_password(void *arg, int ncolumn, char **text, char **name)
{
  DATA data;
  int acceptfd = *(int *)arg;
  sprintf(data.quit, "旧密码:%s\n", text[3]);
  printf("旧密码:%s", data.quit);
  send(acceptfd, &data, sizeof(data), 0);
  return 0;
}

//查询id
int callbackQuery_id(void *arg, int ncolumn, char **text, char **name)
{
  superposition = atoi(text[4]);
  return 0;
}
//用户修改个人信息
void do_Staff_modify_personal(DATA data, MSG msg)
{
  char sql[N] = {0};
  data.flat = 0;
  char *errmsg;
  send(msg.acceptfd, &data, sizeof(data), 0);
  while (1)
  {
    recv(msg.acceptfd, &data, sizeof(data), 0);
    switch (data.flat)
    {
    case -1:
      return;
      break;
    case 1:
      sprintf(sql, "update %s set name='%s' where id=%ld;", EMPLOYEE, data.name, superposition);
      if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
      {
        printf("错误：执行失败\n");
      }
      else
      {
        printf("成功：执行成功\n");
        sprintf(data.quit, "%s成功:名字更改成功\n", data.name);
        send(msg.acceptfd, &data, sizeof(data), 0);
      }
      break;
    case 2:
      sprintf(sql, "update %s set age=%d where id=%ld;", EMPLOYEE, data.age, superposition);
      if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
      {
        printf("错误：执行失败\n");
      }
      else
      {
        printf("成功：执行成功\n");
        sprintf(data.quit, "%s成功:名字更改成功\n", data.name);
        send(msg.acceptfd, &data, sizeof(data), 0);
      }

      break;
    case 3:
      sprintf(sql, "update %s set gender='%s' where id=%ld;", EMPLOYEE, data.gender, superposition);
      if (sqlite3_exec(msg.db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
      {
        printf("错误：执行失败\n");
      }
      else
      {
        printf("成功：执行成功\n");
        sprintf(data.quit, "%s成功:名字更改成功\n", data.name);
        send(msg.acceptfd, &data, sizeof(data), 0);
      }

      break;

    default:
      break;
    }
  }
}
//用户查询历史记录
void do_Staff__Historical_records(DATA data, MSG msg)
{
  strcpy(data.quit, time_str);
  send(msg.acceptfd, &data, sizeof(data), 0);
}
